<!DOCTYPE html>
<!-- saved from url=(0029)chrome-error://chromewebdata/ -->
<html dir="ltr" subframe=""><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  
  <title>csync.smilewanted.com</title>
  <link sizes="16x16" rel="icon" type="image/png" href="chrome-error://chromewebdata/favicon.png">
  <link sizes="32x32" rel="icon" type="image/png" href="chrome-error://chromewebdata/favicon@2x.png">
  <style>body {
    font: .8em Arial,Helvetica,sans-serif;
    position: relative;
    margin: 0;
    padding: 0;
    z-index: 0;
    color: #000;
    background: #e1e1e1;
}

body,html[subframe] {
    height: 100%
}

html[subframe] body {
    background: #fff;
}

wbr {
    display: inline-block
}

:link:hover,:visited:hover {
    color: red!important
}

.wrap {
    margin: 0 auto;
    width: 700px;
    padding: 50px 0
}

.paper {
    margin-top: 0;
    padding: 32px 38px 36px;
    background: #fff;
    box-shadow: 0 10px 40px 10px rgba(0,0,0,.1)
}

html[subframe] .paper {
    box-shadow: none;
    padding: 22px 20px 20px
}

.paper .b-link:link,.paper .b-link:visited:hover {
    color: inherit
}

.paper__inner {
    position: relative
}

.paper__text-wrap {
    position: relative;
    padding-right: 60px
}

.paper__text-wrap::before {
    position: absolute;
    top: -6px;
    right: -5px;
    display: block;
    width: 48px;
    height: 50px;
    content: '';
    background-image: -webkit-image-set(
        url('') 1x,
        url('') 2x
    );
    background-repeat: no-repeat;
    background-position: 100% 0
}

.paper__title {
    font-size: 21px;
    line-height: 1.3;
    margin-bottom: 23px
}

.paper__summary {
    margin-bottom: 13px;
    font-size: 15px;
    line-height: 1.4
}

.paper__summary strong {
    font-weight: 700
}

.paper__action {
    margin-top: 30px
}

.paper__disclosure {
    position: relative;
    overflow: hidden;
    height: 0;
}

.paper__suggestions {
    position: relative;
    margin: 0 0 25px;
    padding: 0;
    font-size: 15px
}

.paper__suggestion {
    display: block;
    margin: 7px 0;
    padding-left: 30px;
    line-height: 1.3
}

.paper__suggestion:first-child {
    margin-top: 0
}

.paper__suggestion:before {
    position: absolute;
    left: 0;
    content: '—'
}

.error {
    margin-top: 25px;
    color: #b4b4b4;
    font-size: 13px;
    transition: 0.5s 0.4s;
    -webkit-font-smoothing: antialiased
}

.error_hidden_yes {
    display: none;
}

.button {
    position: relative;
    display: inline-block;
    margin: 0;
    padding: 0;
    outline: 0;
    text-align: center;
    white-space: nowrap;
    -webkit-user-select: none;
    user-select: none
}

@media all and (min-width:0) {
    .button {
        border: 0
    }

    a.button:link,a.button:visited {
        outline: hidden;
        text-decoration: none
    }
}

@media all and (min-width:0) {
    .button {
        cursor: pointer
    }
}

a.button:hover {
    cursor: default;
    outline: hidden;
    text-decoration: none
}

.button__text {
    position: relative;
    padding: 0 1em
}

.button_disabled_yes {
    opacity: .6
}

.button_disabled_yes,a.button_disabled_yes,a.button_disabled_yes .button__text {
    cursor: default
}

@media all and (min-width:0) {
    .button_pressed_yes .button__text {
        top: 1px
    }
}

@media all and (min-width:0) {
    .button_theme_normal {
        background: linear-gradient(to bottom,rgba(0,0,0,.2)0,rgba(0,0,0,.4)100%);
        box-shadow: 0 1px 0 rgba(0,0,0,.07);
        border-radius: 3px
    }

    .button_theme_normal:before {
        position: absolute;
        bottom: 1px;
        right: 1px;
        left: 1px;
        top: 1px;
        content: '';
        background: linear-gradient(to bottom,#fff 0,#eee 100%);
        border-radius: 2px
    }

    .button_focused_yes.button_theme_normal {
        box-shadow: 0 1px 0 rgba(0,0,0,.07),0 0 6px 2px rgba(255,204,0,.7)
    }

    .button_focused_yes.button_theme_normal:not(.button_pressed_yes):before {
        box-shadow: 0 0 0 1px rgba(193,154,0,.2)
    }

    .button_pressed_yes.button_theme_normal {
        box-shadow: inset 0 2px 1px -1px rgba(0,0,0,.4),0 1px 0 rgba(255,255,255,.2)
    }

    .button_pressed_yes.button_theme_normal:before {
        box-shadow: inset 0 1px 3px -1px rgba(0,0,0,.5)
    }

    .button_theme_normal {
        color: #333!important
    }
}

@media all and (min-width:0) {
    .button_theme_normal.button_hovered_yes:before {
        background: linear-gradient(to bottom,rgba(255,255,255,1)0,rgba(246,245,243,1)100%)
    }
}

a.button_theme_normal.button_hovered_yes {
    color: #333!important
}

.button_size_xs {
    font-size: 13px;
    line-height: 24px
}

.button_hidden_yes {
    display: none;
}

@media all and (min-width:0) {
    .button_theme_action {
        background: linear-gradient(to bottom,rgba(96,64,0,.4)0%,rgba(70,47,0,.54)100%);
        box-shadow: 0 1px 0 rgba(0,0,0,.07);
        border-radius: 3px
    }

    .button_theme_action:before {
        position: absolute;
        bottom: 1px;
        right: 1px;
        left: 1px;
        top: 1px;
        content: '';
        background: linear-gradient(to bottom,#ffdf60 0,#fc0 100%);
        border-radius: 2px
    }

    .button_focused_yes.button_theme_action {
        box-shadow: 0 1px 0 rgba(0,0,0,.07),0 0 6px 2px rgba(255,204,0,.7)
    }

    .button_focused_yes.button_theme_action:before {
        box-shadow: 0 0 0 1px rgba(193,154,0,.2)
    }

    .button_pressed_yes.button_theme_action {
        box-shadow: inset 0 2px 1px -1px rgba(0,0,0,.4),0 1px 0 rgba(255,255,255,.2)
    }

    .button_pressed_yes.button_theme_action:before {
        box-shadow: inset 0 1px 3px -1px rgba(0,0,0,.5)
    }

    .button_theme_action {
        color: #333!important
    }
}

@media all and (min-width:0) {
    .button_theme_action.button_hovered_yes:before {
        background: linear-gradient(to bottom,rgba(255,230,129,1)0,rgba(255,212,40,1)100%)
    }
}

a.button_theme_action.button_hovered_yes {
    color: #333!important
}

.button_theme_action:focus
{
    box-shadow: 0 1px 0 rgba(0, 0, 0, 0.07), 0 0 6px 2px rgba(255, 204, 0, 0.7);
}

.button_theme_action:focus:before
{
    box-shadow: 0 0 0 1px rgba(193,154,0,.2);
}

.button_theme_action:active
{
    box-shadow: inset 0 2px 1px -1px rgba(0, 0, 0, 0.4), 0 1px 0 rgba(255, 255, 255, 0.2);
}

.button_theme_action:active:before
{
    box-shadow: inset 0 1px 3px -1px rgba(0,0,0,.5);
}

.button_theme_action:hover:before
{
    background: linear-gradient(to bottom, rgba(255,230,129,1) 0,rgba(255,212,40,1) 100%);
}

a.button_theme_action:hover
{
    color: #333 !important;
}

.button_size_m {
    line-height: 32px;
    font-size: 15px
}

.button_theme_pseudo,a.button_theme_pseudo:link,a.button_theme_pseudo:visited {
    cursor: pointer;
    color: #333!important
}

.button_theme_pseudo .button__text {
    padding: 0 .78em
}

@media all and (min-width:0) {
    .button_theme_pseudo {
        line-height: 24px
    }

    .button_size_m.button_theme_pseudo {
        line-height: 28px
    }

    .button_theme_pseudo .button__text {
        top: 0
    }

    .button_theme_pseudo {
        outline: hidden;
        border-radius: 3px;
        background: 0 0;
        box-shadow: inset 0 0 0 1px rgba(0,0,0,.2)
    }

    .button_hovered_yes.button_theme_pseudo {
        box-shadow: inset 0 0 0 1px rgba(0,0,0,.35)
    }
}

a.button_theme_pseudo:hover {
    cursor: pointer;
    color: #333!important
}

@media all and (min-width:0) {
    .button_focused_yes.button_theme_pseudo {
        box-shadow: inset 0 0 0 1px rgba(0,0,0,.2),0 0 6px 2px rgba(255,204,0,.7)
    }

    .button_focused_yes.button_hovered_yes.button_theme_pseudo {
        box-shadow: inset 0 0 0 1px rgba(0,0,0,.35),0 0 6px 2px rgba(255,204,0,.7)
    }
}

.button_theme_pseudo:hover
{
    box-shadow: inset 0 0 0 1px rgba(0,0,0,.35);
}

.button_theme_pseudo:focus
{
    box-shadow: inset 0 0 0 1px rgba(0,0,0,.2), 0 0 6px 2px rgba(255,204,0,.7);
}

.button_theme_pseudo:focus:hover
{
    box-shadow: inset 0 0 0 1px rgba(0,0,0,.35), 0 0 6px 2px rgba(255,204,0,.7);
}

[jscontent=failedUrl] {
    display: inline-block;
    display: -webkit-inline-box;
    max-width: 100%;
    overflow-wrap: break-word;
    max-height: 4.2em;
    -webkit-line-clamp: 3;
    -webkit-box-orient: vertical;
    overflow: hidden;
    text-overflow: ellipsis;
    vertical-align: top;
}
</style>
  <script>// Copyright (c) 2017 Yandex LLC. All rights reserved.

const ANIMATION_TIMEOUT = 400;

function diagnoseErrors() {
  if (window.errorPageController)
    errorPageController.diagnoseErrorsButtonClick();
}

// This is used to fix PortalBrowserTest.ShowSubFrameErrorPage test.
// BROWSER-120507
if (window.top.location !== window.location || window.portalHost) {
  document.documentElement.setAttribute('subframe', '');
}

// Re-renders the error page using |strings| as the dictionary of values.
// Used by NetErrorTabHelper to update DNS error pages with probe results.
function updateForDnsProbe(strings) {
  var context = new JsEvalContext(strings);
  jstProcess(context, document.getElementById('t'));
}

// Implements button clicks.  This function is needed during the transition
// between implementing these in trunk chromium and implementing them in
// iOS.
function reloadButtonClick(url) {
  if (window.errorPageController) {
    errorPageController.reloadButtonClick();
  } else {
    location = url;
  }
}

function showErrorBox() {
  if (toggleTimeout)
    clearTimeout(toggleTimeout);

  var disclosure = document.getElementById('disclosure');
  var revealButton = document.getElementById('reveal-button');

  document.querySelector('.error_hidden_yes').classList
      .replace('error_hidden_yes', 'error_hidden_no');
  revealButton.classList.add('button_hidden_yes');
  // transition to height auto
  disclosure.style.height = 'auto';
  var endHeight = getComputedStyle(disclosure).height;
  disclosure.style.height = 0;
  if (!disclosure.classList.contains('no_animate'))
    disclosure.style.transition = `height ease-in-out ${ANIMATION_TIMEOUT}ms`;
  getComputedStyle(disclosure).height; // reflow
  disclosure.style.height = endHeight;

  toggleHelpBox = hideErrorBox;
}

function hideErrorBox() {
  var disclosure = document.getElementById('disclosure');
  var revealButton = document.getElementById('reveal-button');

  document.querySelector('.error_hidden_no').classList
      .replace('error_hidden_no', 'error_hidden_yes');

  toggleTimeout = setTimeout(function() {
          revealButton.classList.remove('button_hidden_yes');
          toggleTimeout = null; },
      ANIMATION_TIMEOUT);

  if (!disclosure.classList.contains('no_animate'))
    disclosure.style.transition = `height ease-in-out ${ANIMATION_TIMEOUT}ms`;
  disclosure.style.height = 0;

  toggleHelpBox = showErrorBox;
}

var toggleTimeout = null;
var toggleHelpBox = showErrorBox;
</script>
</head>
<body id="t" class="b-page" marginwidth="0" marginheight="0" jstcache="0">
  <div class="wrap" jstcache="0">
    <div class="paper" jstcache="0">
      <div class="paper__text-wrap" jstcache="0">
        <div class="paper__title" jsselect="heading" jstcache="4">
          <div class="paper__title-text" jsvalues=".innerHTML:msg" jstcache="10">Сайт <span jscontent="hostName" jstcache="17">csync.smilewanted.com</span> заблокирован.</div>
        </div>
        <div class="paper__summary" jsselect="summary" jstcache="5">
          <div class="paper__summary-text" jsvalues=".innerHTML:msg" jstcache="10">Сайт <strong jscontent="hostName" jstcache="17">csync.smilewanted.com</strong> не&nbsp;позволяет установить соединение.</div>
        </div>
      </div>

      <div id="suggestions-list" style="display:none" jsdisplay="(suggestionsSummaryList &amp;&amp; suggestionsSummaryList.length)" jstcache="1">
        <p jsvalues=".innerHTML:suggestionsSummaryListHeader" jstcache="6"></p>
        <ul jsvalues=".className:suggestionsSummaryList.length == 1 ? &#39;single-suggestion&#39; : &#39;&#39;" jstcache="7">
          <li jsselect="suggestionsSummaryList" jsvalues=".innerHTML:summary" jstcache="11"></li>
        </ul>
      </div>

      <button class="button button_theme_action button_size_m" onclick="location = this.url" jsselect="reload" jsdisplay="reloadUrl" jsvalues=".url:reloadUrl" jstcache="2" style="display: none;">
        <span class="button__text" jscontent="msg" jstcache="8"></span>
      </button>
      <div class="paper__action" jsdisplay="suggestionsDetails" jstcache="3">
        <button class="button button_theme_pseudo button_size_xs" id="reveal-button" jsdisplay="details" onclick="showErrorBox()" jstcache="9">
            <span class="button__text" jsvalues=".detailsText:details; .hideDetailsText:hideDetails;" jscontent="details" jstcache="12">Подробнее</span>
        </button>
      </div>
      <div class="paper__disclosure" id="disclosure" jsdisplay="suggestionsDetails" jstcache="3">
        <ul class="paper__suggestions" jstcache="0">
          <li class="paper__suggestion" jsselect="suggestionsDetails" jstcache="13" jsinstance="*0" style="display: none;">
            <span class="paper__suggestion-text" jsvalues=".innerHTML:header" jstcache="15"></span>
            <span class="paper__suggestion-text" jsvalues=".innerHTML:body" jstcache="16"></span>
          </li>
        </ul>
        <div class="error error_hidden_yes" jstcache="0">
          <span class="error__code" jscontent="errorCode" jstcache="14">ERR_BLOCKED_BY_RESPONSE</span>
        </div>
      </div>
    </div>
  </div>


<script jstcache="0">(function(){function l(a,b,c){return Function.prototype.call.apply(Array.prototype.slice,arguments)}function m(a,b,c){var e=l(arguments,2);return function(){return b.apply(a,e)}}function n(a,b){var c=new p(b);for(c.h=[a];c.h.length;){var e=c,d=c.h.shift();e.i(d);for(d=d.firstChild;d;d=d.nextSibling)1==d.nodeType&&e.h.push(d)}}function p(a){this.i=a}function q(a){a.style.display=""}function r(a){a.style.display="none"};var t=/\s*;\s*/;function u(a,b){this.l.apply(this,arguments)}u.prototype.l=function(a,b){this.a||(this.a={});if(b){var c=this.a,e=b.a;for(d in e)c[d]=e[d]}else{var d=this.a;e=v;for(c in e)d[c]=e[c]}this.a.$this=a;this.a.$context=this;this.f="undefined"!=typeof a&&null!=a?a:"";b||(this.a.$top=this.f)};var v={$default:null},w=[];function x(a){for(var b in a.a)delete a.a[b];a.f=null;w.push(a)}function y(a,b,c){try{return b.call(c,a.a,a.f)}catch(e){return v.$default}}
u.prototype.clone=function(a,b,c){if(0<w.length){var e=w.pop();u.call(e,a,this);a=e}else a=new u(a,this);a.a.$index=b;a.a.$count=c;return a};var z;window.trustedTypes&&(z=trustedTypes.createPolicy("jstemplate",{createScript:function(a){return a}}));var A={};function B(a){if(!A[a])try{var b="(function(a_, b_) { with (a_) with (b_) return "+a+" })",c=window.trustedTypes?z.createScript(b):b;A[a]=window.eval(c)}catch(e){}return A[a]}
function E(a){var b=[];a=a.split(t);for(var c=0,e=a.length;c<e;++c){var d=a[c].indexOf(":");if(!(0>d)){var g=a[c].substr(0,d).replace(/^\s+/,"").replace(/\s+$/,"");d=B(a[c].substr(d+1));b.push(g,d)}}return b};function F(){}var G=0,H={0:{}},I={},J={},K=[];function L(a){a.__jstcache||n(a,function(b){M(b)})}var N=[["jsselect",B],["jsdisplay",B],["jsvalues",E],["jsvars",E],["jseval",function(a){var b=[];a=a.split(t);for(var c=0,e=a.length;c<e;++c)if(a[c]){var d=B(a[c]);b.push(d)}return b}],["transclude",function(a){return a}],["jscontent",B],["jsskip",B]];
function M(a){if(a.__jstcache)return a.__jstcache;var b=a.getAttribute("jstcache");if(null!=b)return a.__jstcache=H[b];b=K.length=0;for(var c=N.length;b<c;++b){var e=N[b][0],d=a.getAttribute(e);J[e]=d;null!=d&&K.push(e+"="+d)}if(0==K.length)return a.setAttribute("jstcache","0"),a.__jstcache=H[0];var g=K.join("&");if(b=I[g])return a.setAttribute("jstcache",b),a.__jstcache=H[b];var h={};b=0;for(c=N.length;b<c;++b){d=N[b];e=d[0];var f=d[1];d=J[e];null!=d&&(h[e]=f(d))}b=""+ ++G;a.setAttribute("jstcache",
b);H[b]=h;I[g]=b;return a.__jstcache=h}function P(a,b){a.j.push(b);a.o.push(0)}function Q(a){return a.c.length?a.c.pop():[]}
F.prototype.g=function(a,b){var c=R(b),e=c.transclude;if(e)(c=S(e))?(b.parentNode.replaceChild(c,b),e=Q(this),e.push(this.g,a,c),P(this,e)):b.parentNode.removeChild(b);else if(c=c.jsselect){c=y(a,c,b);var d=b.getAttribute("jsinstance");var g=!1;d&&("*"==d.charAt(0)?(d=parseInt(d.substr(1),10),g=!0):d=parseInt(d,10));var h=null!=c&&"object"==typeof c&&"number"==typeof c.length;e=h?c.length:1;var f=h&&0==e;if(h)if(f)d?b.parentNode.removeChild(b):(b.setAttribute("jsinstance","*0"),r(b));else if(q(b),
null===d||""===d||g&&d<e-1){g=Q(this);d=d||0;for(h=e-1;d<h;++d){var k=b.cloneNode(!0);b.parentNode.insertBefore(k,b);T(k,c,d);f=a.clone(c[d],d,e);g.push(this.b,f,k,x,f,null)}T(b,c,d);f=a.clone(c[d],d,e);g.push(this.b,f,b,x,f,null);P(this,g)}else d<e?(g=c[d],T(b,c,d),f=a.clone(g,d,e),g=Q(this),g.push(this.b,f,b,x,f,null),P(this,g)):b.parentNode.removeChild(b);else null==c?r(b):(q(b),f=a.clone(c,0,1),g=Q(this),g.push(this.b,f,b,x,f,null),P(this,g))}else this.b(a,b)};
F.prototype.b=function(a,b){var c=R(b),e=c.jsdisplay;if(e){if(!y(a,e,b)){r(b);return}q(b)}if(e=c.jsvars)for(var d=0,g=e.length;d<g;d+=2){var h=e[d],f=y(a,e[d+1],b);a.a[h]=f}if(e=c.jsvalues)for(d=0,g=e.length;d<g;d+=2)if(f=e[d],h=y(a,e[d+1],b),"$"==f.charAt(0))a.a[f]=h;else if("."==f.charAt(0)){f=f.substr(1).split(".");for(var k=b,O=f.length,C=0,U=O-1;C<U;++C){var D=f[C];k[D]||(k[D]={});k=k[D]}k[f[O-1]]=h}else f&&("boolean"==typeof h?h?b.setAttribute(f,f):b.removeAttribute(f):b.setAttribute(f,""+h));
if(e=c.jseval)for(d=0,g=e.length;d<g;++d)y(a,e[d],b);e=c.jsskip;if(!e||!y(a,e,b))if(c=c.jscontent){if(c=""+y(a,c,b),b.innerHTML!=c){for(;b.firstChild;)e=b.firstChild,e.parentNode.removeChild(e);b.appendChild(this.m.createTextNode(c))}}else{c=Q(this);for(e=b.firstChild;e;e=e.nextSibling)1==e.nodeType&&c.push(this.g,a,e);c.length&&P(this,c)}};function R(a){if(a.__jstcache)return a.__jstcache;var b=a.getAttribute("jstcache");return b?a.__jstcache=H[b]:M(a)}
function S(a,b){var c=document;if(b){var e=c.getElementById(a);if(!e){e=b();var d=c.getElementById("jsts");d||(d=c.createElement("div"),d.id="jsts",r(d),d.style.position="absolute",c.body.appendChild(d));var g=c.createElement("div");d.appendChild(g);g.innerHTML=e;e=c.getElementById(a)}c=e}else c=c.getElementById(a);return c?(L(c),c=c.cloneNode(!0),c.removeAttribute("id"),c):null}function T(a,b,c){c==b.length-1?a.setAttribute("jsinstance","*"+c):a.setAttribute("jsinstance",""+c)};window.jstGetTemplate=S;window.JsEvalContext=u;window.jstProcess=function(a,b){var c=new F;L(b);c.m=b?9==b.nodeType?b:b.ownerDocument||document:document;var e=m(c,c.g,a,b),d=c.j=[],g=c.o=[];c.c=[];e();for(var h,f,k;d.length;)h=d[d.length-1],e=g[g.length-1],e>=h.length?(e=c,f=d.pop(),f.length=0,e.c.push(f),g.pop()):(f=h[e++],k=h[e++],h=h[e++],g[g.length-1]=e,f.call(c,k,h))};
})()</script><script jstcache="0">// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/**
 * @fileoverview This file defines a singleton which provides access to all data
 * that is available as soon as the page's resources are loaded (before DOM
 * content has finished loading). This data includes both localized strings and
 * any data that is important to have ready from a very early stage (e.g. things
 * that must be displayed right away).
 *
 * Note that loadTimeData is not guaranteed to be consistent between page
 * refreshes (https://crbug.com/740629) and should not contain values that might
 * change if the page is re-opened later.
 */

/** @type {!LoadTimeData} */
// eslint-disable-next-line no-var
var loadTimeData;

class LoadTimeData {
  constructor() {
    /** @type {?Object} */
    this.data_ = null;
  }

  /**
   * Sets the backing object.
   *
   * Note that there is no getter for |data_| to discourage abuse of the form:
   *
   *     var value = loadTimeData.data()['key'];
   *
   * @param {Object} value The de-serialized page data.
   */
  set data(value) {
    expect(!this.data_, 'Re-setting data.');
    this.data_ = value;
  }

  /**
   * @param {string} id An ID of a value that might exist.
   * @return {boolean} True if |id| is a key in the dictionary.
   */
  valueExists(id) {
    return id in this.data_;
  }

  /**
   * Fetches a value, expecting that it exists.
   * @param {string} id The key that identifies the desired value.
   * @return {*} The corresponding value.
   */
  getValue(id) {
    expect(this.data_, 'No data. Did you remember to include strings.js?');
    const value = this.data_[id];
    expect(typeof value !== 'undefined', 'Could not find value for ' + id);
    return value;
  }

  /**
   * As above, but also makes sure that the value is a string.
   * @param {string} id The key that identifies the desired string.
   * @return {string} The corresponding string value.
   */
  getString(id) {
    const value = this.getValue(id);
    expectIsType(id, value, 'string');
    return /** @type {string} */ (value);
  }

  /**
   * Returns a formatted localized string where $1 to $9 are replaced by the
   * second to the tenth argument.
   * @param {string} id The ID of the string we want.
   * @param {...(string|number)} var_args The extra values to include in the
   *     formatted output.
   * @return {string} The formatted string.
   */
  getStringF(id, var_args) {
    const value = this.getString(id);
    if (!value) {
      return '';
    }

    const args = Array.prototype.slice.call(arguments);
    args[0] = value;
    return this.substituteString.apply(this, args);
  }

  /**
   * Returns a formatted localized string where $1 to $9 are replaced by the
   * second to the tenth argument. Any standalone $ signs must be escaped as
   * $$.
   * @param {string} label The label to substitute through.
   *     This is not an resource ID.
   * @param {...(string|number)} var_args The extra values to include in the
   *     formatted output.
   * @return {string} The formatted string.
   */
  substituteString(label, var_args) {
    const varArgs = arguments;
    return label.replace(/\$(.|$|\n)/g, function(m) {
      expect(m.match(/\$[$1-9]/), 'Unescaped $ found in localized string.');
      return m === '$$' ? '$' : varArgs[m[1]];
    });
  }

  /**
   * Returns a formatted string where $1 to $9 are replaced by the second to
   * tenth argument, split apart into a list of pieces describing how the
   * substitution was performed. Any standalone $ signs must be escaped as $$.
   * @param {string} label A localized string to substitute through.
   *     This is not an resource ID.
   * @param {...(string|number)} var_args The extra values to include in the
   *     formatted output.
   * @return {!Array<!{value: string, arg: (null|string)}>} The formatted
   *     string pieces.
   */
  getSubstitutedStringPieces(label, var_args) {
    const varArgs = arguments;
    // Split the string by separately matching all occurrences of $1-9 and of
    // non $1-9 pieces.
    const pieces = (label.match(/(\$[1-9])|(([^$]|\$([^1-9]|$))+)/g) ||
                    []).map(function(p) {
      // Pieces that are not $1-9 should be returned after replacing $$
      // with $.
      if (!p.match(/^\$[1-9]$/)) {
        expect(
            (p.match(/\$/g) || []).length % 2 === 0,
            'Unescaped $ found in localized string.');
        return {value: p.replace(/\$\$/g, '$'), arg: null};
      }

      // Otherwise, return the substitution value.
      return {value: varArgs[p[1]], arg: p};
    });

    return pieces;
  }

  /**
   * As above, but also makes sure that the value is a boolean.
   * @param {string} id The key that identifies the desired boolean.
   * @return {boolean} The corresponding boolean value.
   */
  getBoolean(id) {
    const value = this.getValue(id);
    expectIsType(id, value, 'boolean');
    return /** @type {boolean} */ (value);
  }

  /**
   * As above, but also makes sure that the value is an integer.
   * @param {string} id The key that identifies the desired number.
   * @return {number} The corresponding number value.
   */
  getInteger(id) {
    const value = this.getValue(id);
    expectIsType(id, value, 'number');
    expect(value === Math.floor(value), 'Number isn\'t integer: ' + value);
    return /** @type {number} */ (value);
  }

  /**
   * Override values in loadTimeData with the values found in |replacements|.
   * @param {Object} replacements The dictionary object of keys to replace.
   */
  overrideValues(replacements) {
    expect(
        typeof replacements === 'object',
        'Replacements must be a dictionary object.');
    for (const key in replacements) {
      this.data_[key] = replacements[key];
    }
  }

  /**
   * Reset loadTimeData's data. Should only be used in tests.
   * @param {?Object} newData The data to restore to, when null restores to
   *    unset state.
   */
  resetForTesting(newData = null) {
    this.data_ = newData;
  }

  /**
   * @return {boolean} Whether loadTimeData.data has been set.
   */
  isInitialized() {
    return this.data_ !== null;
  }
}

  /**
   * Checks condition, throws error message if expectation fails.
   * @param {*} condition The condition to check for truthiness.
   * @param {string} message The message to display if the check fails.
   */
  function expect(condition, message) {
    if (!condition) {
      throw new Error(
          'Unexpected condition on ' + document.location.href + ': ' + message);
    }
  }

  /**
   * Checks that the given value has the given type.
   * @param {string} id The id of the value (only used for error message).
   * @param {*} value The value to check the type on.
   * @param {string} type The type we expect |value| to be.
   */
  function expectIsType(id, value, type) {
    expect(
        typeof value === type, '[' + value + '] (' + id + ') is not a ' + type);
  }

  expect(!loadTimeData, 'should only include this file once');
  loadTimeData = new LoadTimeData;

  // Expose |loadTimeData| directly on |window|, since within a JS module the
  // scope is local and not all files have been updated to import the exported
  // |loadTimeData| explicitly.
  window.loadTimeData = loadTimeData;

  console.warn('crbug/1173575, non-JS module files deprecated.');</script><script jstcache="0">const pageData = {"details":"Подробнее","errorCode":"ERR_BLOCKED_BY_RESPONSE","fontfamily":"Arial, sans-serif","fontsize":"75%","heading":{"hostName":"csync.smilewanted.com","msg":"Сайт \u003Cspan jscontent=\"hostName\">\u003C/span> заблокирован."},"hideDetails":"Скрыть подробности","iconClass":"icon-generic","language":"ru","suggestionsDetails":[],"suggestionsSummaryList":[],"summary":{"failedUrl":"https://csync.smilewanted.com/","hostName":"csync.smilewanted.com","msg":"Сайт \u003Cstrong jscontent=\"hostName\">\u003C/strong> не позволяет установить соединение."},"textdirection":"ltr","title":"csync.smilewanted.com"};loadTimeData.data = pageData;var tp = document.getElementById('t');jstProcess(new JsEvalContext(pageData), tp);</script></body></html>